package com.atguigu.structures.tree;

import com.atguigu.structures.tree.node.TreeNode;

/**
 * 二叉树
 *
 * @author xr-8
 * @date 2022-09-21
 * @time 23:36
 */
public class BinaryTree {

    private TreeNode root;

    /**
     * 前序遍历
     */
    public void preOrder() {
        if(root != null) {
            root.preOrder();
        }else {
            System.out.println("二叉树为空，无法遍历");
        }
    }
    /**
     * 中序遍历
     */
    public void infixOrder() {
        if(root != null) {
            root.infixOrder();
        }else {
            System.out.println("二叉树为空，无法遍历");
        }
    }
    /**
     * 后序遍历
     */
    public void postOrder() {
        if(root != null) {
            root.postOrder();
        }else {
            System.out.println("二叉树为空，无法遍历");
        }
    }

    /**
     * 前序遍历查找
     * @param no
     * @return
     */
    public TreeNode preOrderSearch(int no) {
        if(root != null) {
           return root.preOrderSearch(no);
        }
        return null;
    }
    /**
     * 中序遍历查找
     * @param no
     * @return
     */
    public TreeNode infixOrderSearch(int no) {
        if(root != null) {
            return root.infixOrderSearch(no);
        }
        return null;
    }
    /**
     * 后序遍历查找
     * @param no
     * @return
     */
    public TreeNode postOrderSearch(int no) {
        if (root != null) {
            return root.postOrderSearch(no);
        }
        return null;
    }

    /**
     * 删除节点
     * @param no
     */
    public void delNode(int no) {
        if (root != null) {
            //如果只有一个root结点, 这里立即判断root是不是就是要删除结点
            if (root.getId() == no) {
                root = null;
            } else {
                //递归删除
                root.delNode(no);
            }
        } else {
            System.out.println("二叉树为空");
        }
    }


    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }
}
